#ifndef PROCESS_H
#define PROCESS_H

class Process {
private:
  int arrival_time = -1;
  int total_time = -1;
  int cpu_burst = -1;
  int io_burst = -1;
  int priority = -1;
  int pid = 0;
  int finishing_time = 0;
  int cpu_waiting = 0;
  int time_running = 0;
  int time_blocked = 0;
  int time_in_previous_state = 0;

public:
  int last_event_time = 0;
  int dynamic_priority = 0;
  int cb_remaining = 0;
  int dynamic_reset = false;

  // Setters
  void set_arrival_time(int AT);

  void set_total_time(int TT);

  void set_cpu_burst(int CB);

  void set_io_burst(int IO);

  void set_pid(int p);

  void set_priority(int P);

  void set_finishing_time(int FT);

  void add_time_running(int r);

  void add_time_blocked(int b);

  void add_cpu_waiting(int CPU);

  void set_time_prev_state(int TPS);

  // Getters
  int get_arrival_time();

  int get_total_time();

  int get_cpu_burst();

  int get_io_burst();

  int get_priority();

  int get_finishing_time();

  int get_time_prev_state();

  int get_time_blocked();

  int get_time_running();

  int get_pid();

  int get_cpu_waiting();

  void set_incrementally(int val);

  int get_remaining_time();
};

#endif // PROCESS_H
